import request from "@/utils/request";

const DEVICE_BASE_URL = "/api/v1/devices";

const DeviceAPI = {
  /**
   * 分页查询设备列表
   *
   * @param queryParams 查询参数
   */
  getPage(data) {
    return request<any, PageResult<DevicePageVO[]>>({
      url: "/device/v1/page",
      method: "post",
      data,
    });
  },

  // 设备轨迹查询
  getLocus(data) {
    return request<any, PageResult<DevicePageVO[]>>({
      url: "/locus/v1/page",
      method: "post",
      data,
    });
  },

  /**
   * 添加设备
   *
   * @param data 设备类型表单数据
   */
  createDev(data: DeviceForm) {
    return request({
      url: "/device/v1/add",
      method: "post",
      data,
    });
  },
  /**
   * 轨迹纠偏
   *
   * @param data 轨迹纠偏表单数据
   */
  proofreadingBias(data: DeviceForm) {
    return request({
      url: "/locus/v1/proofreadingBias",
      method: "post",
      data,
    });
  },
  /**
   * 销售设备
   *
   * @param data 设备类型表单数据
   */
  salesDev(data: DeviceForm) {
    return request({
      url: "/device/v1/sales",
      method: "post",
      data,
    });
  },

  /**
   * 发送短信
   *
   * @param data 设备类型表单数据
   */
  activeDev(data: DeviceForm) {
    return request({
      url: "/device/v1/active",
      method: "post",
      params: data,
    });
  },

  /**
   * 更新设备
   *
   * @param data 设备表单类型数据
   */
  updateDev(data: DeviceForm) {
    return request({
      url: "/device/v1/fix",
      method: "put",
      data,
    });
  },

  // 设备类型列表
  getdevType(queryParams) {
    return request({
      url: "/deviceType/v1/list",
      method: "get",
      params: queryParams,
    });
  },

  // 查询未绑定的设备列表
  notBind(queryParams: DevicePageQuery) {
    return request({
      url: "/device/v1/notBind",
      method: "get",
      params: queryParams,
    });
  },

  /**
   * 添加设备类型
   *
   * @param data 设备类型表单数据
   */
  createType(data: DeviceForm) {
    return request({
      url: "/deviceType/v1/add",
      method: "post",
      data,
    });
  },
  /**
   * 更新设备类型
   *
   * @param data 设备表单类型数据
   */
  updateType(data: DeviceForm) {
    return request({
      url: "/deviceType/v1/fix",
      method: "put",
      data,
    });
  },
  /**
   * 删除设备类型
   *
   * @param ids 设备ID，多个用逗号分隔
   */
  deleteType(ids: string) {
    return request({
      url: "/deviceType/v1/del?id=" + ids,
      method: "delete",
    });
  },

  /**
   * 删除设备类型
   *
   * @param ids 设备ID，多个用逗号分隔
   */
  deleteDev(ids: string) {
    return request({
      url: "/device/v1/del?id=" + ids,
      method: "delete",
    });
  },
  /**
   * 获取设备表单详情
   *
   * @param deviceId 设备ID
   * @returns 设备表单详情
   */
  getFormData(deviceId: string) {
    return request<any, DeviceForm>({
      url: `${DEVICE_BASE_URL}/${deviceId}/form`,
      method: "get",
    });
  },

  /**
   * 添加设备
   *
   * @param data 设备表单数据
   */
  create(data: DeviceForm) {
    return request({
      url: `${DEVICE_BASE_URL}`,
      method: "post",
      data,
    });
  },

  /**
   * 更新设备
   *
   * @param id 设备ID
   * @param data 设备表单数据
   */
  update(id: string, data: DeviceForm) {
    return request({
      url: `${DEVICE_BASE_URL}/${id}`,
      method: "put",
      data,
    });
  },

  /**
   * 删除设备
   *
   * @param ids 设备ID，多个用逗号分隔
   */
  deleteByIds(ids: string) {
    return request({
      url: `${DEVICE_BASE_URL}/${ids}`,
      method: "delete",
    });
  },
  /**
   * 导入设备
   *
   * @param file 导入文件
   */
  import(file: File) {
    const formData = new FormData();
    formData.append("file", file);
    return request<any, ExcelResult>({
      url: "/device/v1/upload",
      method: "post",
      data: formData,
      headers: {
        "Content-Type": "multipart/form-data",
      },
    });
  },
  /**
   * 导出设备
   *
   * @param queryParams 查询参数
   */
  export(queryParams: DevicePageQuery) {
    return request({
      url: `${DEVICE_BASE_URL}/export`,
      method: "get",
      params: queryParams,
      responseType: "blob",
    });
  },

  /**
   * 获取设备下拉选项
   */
  getOptions() {
    return request<any, OptionType[]>({
      url: `${DEVICE_BASE_URL}/options`,
      method: "get",
    });
  },
};

export default DeviceAPI;

/**
 * 设备分页查询参数
 */
export interface DevicePageQuery extends PageQuery {
  /** 搜索关键字 */
  keywords?: string;
  /** 设备状态 */
  status?: number;
  /** 设备类型 */
  deviceType?: string;
  /** 所属用户ID */
  userId?: string;
  /** 创建时间 */
  createTime?: [string, string];
  /** 设备编号 */
  deviceNumber?: string;
  /** 设备名称 */
  deviceName?: string;
}

/** 设备分页对象 */
export interface DevicePageVO {
  /** 设备ID */
  id: string;
  /** 设备编号 */
  deviceNumber: string;
  /** 设备名称 */
  deviceName: string;
  /** 设备类型 */
  deviceType?: string;
  /** 设备品牌 */
  brand?: string;
  /** 设备型号 */
  model?: string;
  /** 序列号 */
  serialNumber?: string;
  /** 购买日期 */
  purchaseDate?: string;
  /** 保修期至 */
  warrantyDate?: string;
  /** 设备位置 */
  location?: string;
  /** 负责人 */
  responsiblePerson?: string;
  /** 负责人电话 */
  responsiblePhone?: string;
  /** 设备状态(1:正常;2:维修中;3:报废;0:停用) */
  status?: number;
  /** 所属用户ID */
  userId?: string;
  /** 所属用户名称 */
  userName?: string;
  /** 创建时间 */
  createTime?: Date;
  /** 备注 */
  remark?: string;
}

/** 设备表单类型 */
export interface DeviceForm {
  /** 设备ID */
  id?: string;
  /** 设备编号 */
  deviceNumber: string;
  /** 设备名称 */
  deviceName: string;
  /** 设备类型 */
  deviceType?: string;
  /** 设备品牌 */
  brand?: string;
  /** 设备型号 */
  model?: string;
  /** 序列号 */
  serialNumber?: string;
  /** 购买日期 */
  purchaseDate?: string;
  /** 保修期至 */
  warrantyDate?: string;
  /** 设备位置 */
  location?: string;
  /** 负责人 */
  responsiblePerson?: string;
  /** 负责人电话 */
  responsiblePhone?: string;
  /** 设备状态 */
  status?: number;
  /** 所属用户ID */
  userId?: string;
  /** 备注 */
  remark?: string;
}
